No.2.3 纸牌

您所在的位置:网站首页 纸牌 小猫钓鱼 No.2.3 纸牌

No.2.3 纸牌

2024-07-11 00:53| 来源: 网络整理| 查看: 265

1.规则:将一副扑克牌平均分成两份,每人拿一份。小哼先拿出手中的第一张扑克牌放在桌上,然后小哈也拿出手中的第一张扑克牌,并放在小哼刚打出的扑克牌的上面,就像这样两人交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌面相同,即可将两张相同的牌及其中间所夹的牌全部取走,并依次放到自己手中牌的末尾。当任意一人手中的牌全部出完时,游戏结束,对手获胜。【假设牌面只有1~9】

2.分析:

  每个人都有两种操作:出牌和赢牌     队列的出栈与入栈

  struct queue {int data[100]; int head; int tail;};

  桌面规则:有相同的牌,则两张牌及其之间的牌面全部出栈,并给赢牌的一方入栈,此处用栈

  struct stack {int data[10]; int top;}

3.解题思路: 

struct queue{   int data[100];   int head;   int tail;};

struct stack{   int data[100];   int top;};

struct stack s;

struct queue push_card(){ //发牌   struct queue q;   int n,i;   printf("开始发牌:");

  scanf("请输入牌数%d",&n);   for (i=1;itail++;   }   return *q;}

//出牌void play_card(queue *q){   int t;   int top, i, book[10];

  for (i=1;ihead++;     book[t]=1;   }   else   {     q->head++;     q->data[q->tail]=t;     q->tail++;     while(s.data[s.top]!=t){       book[s.data[s.top]]=0;       q->data[q->tail]=s.data[s.top];       q->tail++;       s.top--;     }   }}

//谁输谁赢?int who_win(queue *q){   int i;   if (q->head == q->tail){     flag = 1;     for (i=q->head;itail-1;i++)       printf("%d ",q->data[i]);     if (s.top>0){       printf("%d ",s.data[s.top]);       s.top--;     }     else       printf("table is clear");    }   return flag;}

int main(){   struct queue q1, q2;   int i,n,t;   int top;

  //初始化指针   q1.head=1;q1.tail=1;   q2.head=1;q2.tail=1;   s.top=0;   flag=0;

  //发牌   q1 = push_card(&q1);   q2 = push_card(&q2);

  //出牌   while(q1.head



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3